<?php
class Zend_View_Helper_Grid extends Zend_View_Helper_Abstract
{  
    protected $tb;
    
    private function colunasSemOrdenacao($colunas){
    	$atributo = null;
    	for($i=0; $i<count($colunas); $i++){
    		$atributo .= ', '.$colunas[$i].': { sorter: false } ';
    	}
    	$atributo = substr($atributo, 1);
    	return $atributo;
    }
    
    /*
     * $data   		=> Retorno da consulta realizada; 
     * $coluns 		=> array - Deve informar o nome das colunas que serã listadas e o nome que cada coluna irá conter;
     * 			  				Exemplo: array('Evento' => 'nm_evento')
     * $attrs  		=> Atributos da GRID; 
     * $checkBox	=> array contendo configuração de como o checkBox será. 
     * 				   Valores obrigatórios (quando utilizado checkBox): o array deve conter indice com o nome 'tipo_selecao'. 
     * 				   Os valores possíveis são: selecaoUnica=Só é permitido a seleção de um único registro;
     * 								             selecaoMultipla=Permite a seleção de múltiplos registros.
     * $actionsGrid => Funções que a grid pode executar;
     * 				   editFunctionAjax
     * 				   editFunctionGet
     * 				   deleteFunctionPost	
     * 				   deleteFunctionGet   
     * 				   
     * 				
     * 							Exemplo: array(=null, $functionEditRow=null, $buttonDelete = false, $ordenacao = false
     */
    public function Grid ( $data , $coluns, $attrs=null, $checkBox=null, $actionsGrid=null, $mascara=array(), $ordenar=0) {
        if ( is_object( $data )  && ! empty( $coluns ) ) {
        	$check=false;
        	$ordenacaoInicial = $ordenar;
        	//Valida array checkBox
            if (!empty($checkBox)){
            	if (!is_array($checkBox)){
            		echo "O parametro checkBox deve ser um array.";
            		return;
            	}else{
            		if (!array_key_exists('tipo_selecao', $checkBox)){
            			echo "O parametro tipo_selecao do array checkBox não foi definido.";
            			return;
            		}
            		$check=true;
            		$col_sem_cabecalhos[] = 0;
            		$ordenacaoInicial = ++; 
            	}
            } 
            //Valida array $actionsGrid - Ações da grid
            $checkActions = false;
            if (!empty($actionsGrid)){
            	if (!is_array($actionsGrid)){
            		echo "O parametro actionsGrid deve ser um array.";
            		return;
            	}else{
            		if (!array_key_exists('editFunctionAjax',   $actionsGrid) && !array_key_exists('editFunctionGet',   $actionsGrid) && 
            			!array_key_exists('deleteFunctionPost', $actionsGrid) && !array_key_exists('deleteFunctionGet', $actionsGrid)){
            			echo "A ação específicada não foi entendida.";
            			return;
            		}
            		$checkActions = true;   		
            	}
            }    
            //Contar a quantidade de colunas que irá compor a tabela
            $editAction = false;
            $qtdColunas = (count($coluns)-1) + ($check == true) ? (1) : (0); ;
            for($i=0; $i<count($actionsGrid);$i++){
            	$col_sem_cabecalhos[] = $qtdColunas + 1;
            }
            /*
            if (array_key_exists('editFunctionAjax',   $actionsGrid) || array_key_exists('editFunctionGet',   $actionsGrid)){
            	$col_sem_cabecalhos[] = $qtdColunas + 1;
            	$editAction = true;
            }
            if (array_key_exists('deleteFunctionPost', $actionsGrid) || array_key_exists('deleteFunctionGet', $actionsGrid)){
            	if ($editAction == true){
            		$col_sem_cabecalhos[] = $qtdColunas + 2;
            	} else {
            		$col_sem_cabecalhos[] = $qtdColunas + 1;
            	} 
            }
            if (array_key_exists('otherFunctionGet1', $actionsGrid)){
            	
            }
            */
            
			//Headers            
			//JavaScrpits
			//JQUERY para montar a função de ordenção dos valores estáticos da grid //function checkUncheckAll(){
            $this->tb .= '
            <script type="text/javascript">
				//CheckBox Seleção única           	
				function selecionarRegistro(checkValue){
					$(".checkSel").attr({checked: false});
					var checkList = document.getElementsByName("checkBox");
					for (i = 0; i < checkList.length; i++){
						if (checkList[i].value==checkValue){
							checkList[i].checked = true;
						}		
					}
				}	                
	            $(function(){
					
					$(".grid_button" ).button("destroy");						
	            	//CheckBox Selecionar todos
	            	$("#CheckUnCheckAll").change(function(){
						var checkValue = $("#CheckUnCheckAll").attr("checked"); 
		            	$(".checkSel").attr({checked: checkValue});	            	
		            }); 	     
	                //TableSorter
	                // Parâmetros: sortList: [[0, 0], [1, 1]] ->Indica que a tabela será ordenada pela coluna com o indice 0 (primeira) e ASC e pela coluna com o indice 1 (segunda) e DESC
	                $("#mytable").tablesorter({widthFixed: true, 
		            						   widgets: ["zebra"],
		            						   cancelSelection: true,
		            						   sortList: [['.$ordenacaoInicial.',0]],
		            						   headers: { 
										            '.$this->colunasSemOrdenacao($col_sem_cabecalhos).'
										        }
	                                          });                                         
		        });
		        
	        
            </script>';  
              
            $this->tb .='<center>';
    		$this->tb .='<div style="width: 95%; padding-bottom: 1%;">';
            $this->tb .= "<table cellspacing='1'";
        	if ( ! empty( $attrs ) && is_array( $attrs ) ) {
                $attributes = '';
                foreach ( $attrs as $attr => $values ) {
                    $attributes .= $attr .'="'. $values .'" ';
                }
                $this->tb .=$attributes;
            }            
            $this->tb.= " >";
            $this->tb .= "<thead><tr>";

            //Cabeçalho do checkBox
            if ($check==true){
            	$this->tb .= '<th class="vazio">';
            	if ($checkBox['tipo_selecao']=='selecaoUnica'){	
            		$this->tb .="&nbsp;";
            	}elseif ($checkBox['tipo_selecao']=='selecaoMultipla'){
            		$this->tb .='<input name="CheckUnCheckAll" id="CheckUnCheckAll" type="checkbox" title="Selecionar todos os registro"/>';
            	}
            	$this->tb .="</th>";           	
            }
            foreach ( $coluns as $key => $value ) {
                $this->tb .= "<th>".$key."</th>";
            }
            
            //Cabeçalho botões
            if ($checkActions) {
            	for($i=0; $i<count($actionsGrid); $i++){
            		$this->tb .= "<th class='vazio'>&nbsp;</th>";
            	} 
            	/*
	            if (array_key_exists('editFunctionAjax', $actionsGrid) || array_key_exists('editFunctionGet', $actionsGrid)){
	 				
	            }
	            //Cabeçalho botão excluir
	            if (array_key_exists('deleteFunctionGet', $actionsGrid) || array_key_exists('deleteFunctionPost', $actionsGrid)){
	           		$this->tb .= "<th class='vazio'>&nbsp;</th>"; 		
	            }*/	
            }
            $this->tb .= "</tr></thead><tbody>";
            //Itens
            $grid=0;
            foreach ( $data as $fields ){
				$classgrid = $grid % 2 == 0 ? "row_off" : "row_on";
				$grid++;
				$this->tb .= '<tr id="linha_'.$fields["id"].'" class="'.$classgrid.'" '.stripslashes('onMouseOver="this.style.backgroundColor=\'#FFF4B7\';" onMouseOut="this.style.backgroundColor=\'\';"').'>';
				if ($check==true){
                	if ($checkBox['tipo_selecao']=='selecaoUnica'){	
						$this->tb .='<td width=20px><input name="checkBox" id="checkSel" class="checkSel" type="checkbox" onchange="selecionarRegistro(this.value)" value="'.$fields['id'].'"';
						if (array_key_exists('checkedValue', $checkBox)){
							if ($fields["id"]==$checkBox['checkedValue']){							
								$this->tb .=' checked="checked" ';
							}
						}
						$this->tb .=' /></td>';
                	} elseif ($checkBox['tipo_selecao']=='selecaoMultipla'){
                		$this->tb .='<td width=20px><input name="checkBox" id="checkSel" class="checkSel" type="checkbox" value="'.$fields['id'].'"/></td>';
                	}
				}
				$mask = $mascara;
				foreach ( $coluns as $value ) {                	
                    $this->tb .= "<td>";
                    if (array_search('telefone', $mask)==$value){
                    	$this->tb .= StringFormat::formatarCampo($fields[ $value ], StringFormat::maskFone());	
                    	array_shift($mask);
                    } else {
                    	$this->tb .= $fields[ $value ];
                    }
                    $this->tb .= "</td>";
                    
                
                }
                
                if ($checkActions){
                	//
                	if (array_key_exists('otherFunctionGet1', $actionsGrid)){
                		$this->tb .= '<td width=20px>';
                		$this->tb .= '<a id="otherFunction01'.$fields["id"].'" title="Validar este registro." href="'.$actionsGrid['otherFunctionGet1'].$fields["id"].'"><img src="'.$this->view->imageUrl.'/ok.png" border="0"></a>';
                	}
                	//Detalhar objeto via AJAX
                	if (array_key_exists('detalhesFunctionAjax', $actionsGrid)){
                		$this->tb .= '<td width=20px>';
                		$this->tb .= '<a id="btEditarRegistro'.$fields["id"].'" title="Editar este registro." onclick="'.$actionsGrid['detalhesFunctionAjax'].'('.$fields["id"].')"><img src="'.$this->view->imageUrl.'/b_edit.png" border="0"></a>';
                	}
                	
					//EDITAR - Chamada função javaScript                	
	                if (array_key_exists('editFunctionAjax', $actionsGrid)){
						$this->tb .= '<td width=20px>';
			        	$this->tb .= '<a id="btEditarRegistro'.$fields["id"].'" title="Editar este registro." onclick="'.$actionsGrid['editFunctionAjax'].'('.$fields["id"].')"><img src="'.$this->view->imageUrl.'/b_edit.png" border="0"></a>';
	                }
	                //EDITAR - Chamada função por get
	                if (array_key_exists('editFunctionGet', $actionsGrid)){
						$this->tb .= '<td width=20px>';
			        	$this->tb .= '<a id="editarRegistro'.$fields["id"].'" title="Editar este registro." href="'.$actionsGrid['editFunctionGet'].$fields["id"].'"><img src="'.$this->view->imageUrl.'/b_edit.png" border="0"></a>';
	                }                
			        //DEL - chamada função post
			        if (array_key_exists('deleteFunctionPost', $actionsGrid)){
			        	$this->tb .= '<td width=20px>';
			        	$this->tb .= '<button class="grid_button" name="excluir_registro" value="'.$fields["id"].'" id="excluir_registro" title="Excluir este registro." onClick="return confirma_exclusao();"><img src="'.$this->view->imageUrl.'/b_drop.png" border="0"></button>';
			        }
			        //DEL - chamada funçao get
	            	if (array_key_exists('deleteFunctionGet', $actionsGrid)){
			        	$this->tb .= '<td width=20px>';
			        	$this->tb .= '<a id="excluirRegistro'.$fields["id"].'" name="excluirRegistro" title="Excluir este registro." href="'.$actionsGrid['deleteFunctionGet'].$fields["id"].'" onClick="return confirma_exclusao();"><img src="'.$this->view->imageUrl.'/b_drop.png" border="0"></a>';
			        }	
               		$this->tb .= '</td>';
                }  	                        
                $this->tb .= "</tr>";
            }
            $this->tb .= "</tbody></table></center>";
           /* 
            if (array_key_exists('checkFunctions', $actionsGrid)){
            	$this->tb .= '<ul><li>';
            	$this->tb .= '<a class="removeAll" title="Remover todos selecionados" value="excluir" id="submit_mult" name="submit_mult" type="submit" onclick=" return setarActionExcluir();">Excluir todos registros</a>';
            	$this->tb .= '<button class="removeAll">Excluir selecionados</button>';
            	$this->tb .= '</li></ul>';
            }
		    


<button id="opener">Open Dialog</button>		    
		    
		    

		/*
		
		</ul>
		    <img class="icon" alt="Remover" width="18" height="18" title="Remover" src="'.$this->view->imageUrl.'/remove.png">

		    <button class="mult_submit" title="Validar todos selecionados" value="validar" id="submit_mult" name="submit_mult" type="submit" onclick=" return setarActionValidar();">
			<img class="icon" alt="Validar" width="18" height="18" title="Validar" src="/bntmercosul/public/images/ok.png">
			</button> 
			<li  title=".ui-icon-trash"></li>
			           
            $this->tb .= "</div>";*/
            echo $this->tb;
        } else {
            echo "O primeiro e o segundo argumento são obrigatórios. O primeiro argumento deve ser um objeto e o segundo um array";
        }
    }

}